package com.hs.shirodemo2.controller;

import com.hs.shirodemo2.constant.SystemCode;
import com.hs.shirodemo2.entity.UserInfo;
import com.hs.shirodemo2.service.SysUserService;
import com.hs.shirodemo2.utils.Result;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("/auth")
public class LoginController {

    @Autowired
    private SysUserService sysUserService;

    /**
     * 登录接口
     * 调用Service中的login方法
     * 如果返回值为null，表示用户的用户名或密码错误
     * 如果返回值不为null
     * 1.将用户信息UserInfo对象存放在HttpSession中
     * 2.返回登陆成功的结果（可以将用户信息发送到前端）
     *
     * 注意：
     * 登录通常为了密码的安全，采用post请求
     */
    @PostMapping("/login")
    public Result login(@RequestBody UserInfo userInfo) {
        UserInfo dbUserInfo = sysUserService.login(userInfo.getUsername(), userInfo.getUserpwd());
        if (dbUserInfo != null) {
            Session session = SecurityUtils.getSubject().getSession();
            session.setAttribute("userInfo", dbUserInfo);
            return Result.success(dbUserInfo);
        }
        return Result.error(SystemCode.USERNAME_ERROR.getCode(), SystemCode.USERNAME_ERROR.getMessage(), null);
    }

    /**
     * 登出接口
     */
    @GetMapping("/logout")
    public Result logout(HttpSession session) {
        session.removeAttribute("userInfo");
        session.invalidate();
        return Result.success();
    }

}